Zabbix脚本报警介质自定义

        zabbix支持mail报警,sms报警,以及自定义报警,用到最多的还是脚本报警,当事件通知到脚本,会传递给脚本三个参数。

  • $1:发送给谁
  • $2:标题
  • $3:报警内容

        添加媒介类型:Adminstrator→Media Type→Add

        那么上面提到的sms.sh放在哪里呢?

1
2
3
4
5
6
7
8
9
10
11
[root@aliyun-test ~]# cd /usr/lib/zabbix/alertscripts/
[root@aliyun-test alertscripts]# vim sms.sh
#!/bin/bash
ALERT_TO=$1
ALERT_TITLE=$2
ALERT_BODY=$3
echo $ALERT_TO >> /tmp/sms.log
echo $ALERT_TITLE >> /tmp/sms.log
echo $ALERT_BODY >> /tmp/sms.log
[root@aliyun-test alertscripts]# chmod +x ./sms.sh

        上面这个目录在zabbix的server配置段有定义,定义内容如下:

1
2
3
4
5
6
7
8
9
### Option: AlertScriptsPath
# Full path to location of custom alert scripts.
# Default depends on compilation options.
#
# Mandatory: no
# Default:
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts

        添加Actions:

        修改用户的媒体类型:

        添加完了以后,还记得我们之前添加过得nginx.active>10的触发器么。这里去触发一下触发器然后观察event事件。

        我们发现他在发信息呢。看看我们定义的/tmp下的sms.log有没有内容呢:

1
2
3
4
5
6
7
8
9
10
[root@aliyun-test ~]# tail -F /tmp/sms.log
test@admin.com
PROBLEM: 当nginx的动态连接数大于10的话我就报警
Original event ID: 454*:*UNKNOWN*): *UNKNOWN*1
test@admin.com
PROBLEM: 当nginx的动态连接数大于10的话我就报警
Original event ID: 455*:*UNKNOWN*): *UNKNOWN*9
test@admin.com
PROBLEM: 当nginx的动态连接数大于10的话我就报警
Original event ID: 456*:*UNKNOWN*): *UNKNOWN*4

        可以发现确实写入到文本了。那么在实际的应用中我们就可以使用传过来的$1 $2 $3这三个来灵活的去处理了。只要获取到这个内容我们就可以按照自己的要求去处理了,不管你是发短信还是发邮件都是OK的。这取决于你的脚本到底是怎么写的。

        关于短信发送的相关信息我们可以参考阿里大于,在阿里大于的帮助平台提供有短信发送的API以及相关参数。当然也可以使用Curl来完成,不过就是稍微有点麻烦就是了。

        实践需要注意的一些内容:

        Actions中定义的内容都是我们要收到的内容,如果你使用邮件这应该问题不大,不过你要是使用短信的话你就需要注意点了。因为在国内一条短信的长度是有限制的,搞不好一条短信发不完还得分开好几条发送,如果告警多了这个花销也是不可小看的。因此我们可以把actions改造一下,其实获取关键信息就足够了,定位机器,定位故障等。